/**
 * 大陆手机号码11位数，匹配格式：前三位固定格式+后8位任意数
 * 此方法中前三位格式有：
 * 13+任意数
 * 145,147,149
 * 15+除4的任意数(不要写^4，这样的话字母也会被认为是正确的)
 * 166
 * 17+3,5,6,7,8
 * 18+任意数
 * 198,199
 * 暂时不加区号+86（或0086）
 */
function isChinaPhoneLegal(phone) {
    let reg = /^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[3,5,6,7,8])|(18[0-9])|(19[8,9]))\d{8}$/
    if (reg.test(phone) === false) {
        console.error('isChinaPhoneLegal' + phone + "电话输入不正确！");
        return false;
    } else {
        return true;
    }
}

/**
 * 香港手机号码8位数，5|6|8|9开头+7位任意数
 * 暂时不加区号+852（或00852）
 */
function isHKPhoneLegal(phone) {
    let reg = /^([5689])\d{7}$/
    if (reg.test(phone) === false) {
        console.error('isHKPhoneLegal' + phone + "电话输入不正确！");
        return false;
    } else {
        return true;
    }
}

/**
 * @param phone
 * @returns {boolean}
 */
function isPhoneLegal(phone) {
    return isChinaPhoneLegal(phone) || isHKPhoneLegal(phone)
}

/**
 * 十六进制颜色转换RGB
 * @param color
 * @returns {string|*}
 */
function fnToRGB (color) {
    var str = "";
    var result = [];
    var reg = /^#[0-9a-zA-Z]{3}$/;
    if (color === "invalid") {
        return "invalid";
    }
    if (reg.test(color)) {
        return color;
    }
    else {
        for (var i = 1; i <= 6; i = i + 2) {
            str = color.substr(i, 2);
            var ss = parseInt(str, 16);
            result.push(ss);
        }
    }
    result = 'rgb(' + result.join(',') + ')';
    return result;
}

/**
 * js获取url参数（区分大小写）
 * @param paramName
 * @returns {null|*}
 */
function getUrlParam (paramName) {
    var obj = {};
    var search = window.location.search;
    var paramArr = null;
    if (!search) {
        return paramArr;
    }
    paramArr = decodeURI(search).substring(1).split('&');
    for (var i = 0, max = paramArr.length, item = []; i < max; i++) {
        item = paramArr[i].split('=');
        obj[item[0]] = item[1];
    }
    return obj[paramName];
}

/**
 * js获取url参数(正则表达式法)（不区分大小写）
 * @param paramName
 * @returns {string|null}
 */
function getUrlParamByReg (paramName) {
    var paramStr = window.location.search.substring(1);
    var reg = new RegExp('(^|&)' + paramName + '=([^&]*)(&|$)', 'i');
    var result = paramStr.match(reg);
    if (result) {
        return decodeURI(result[2]);
    }
    return null;
}

/**
 * 判断对象是否有环
 * @param obj
 * @returns {boolean}
 */
function isCircleObject(obj) {
    const cache = new Set();
    let isFind = false;
    const find = function (obj) {
        for(let key in obj) {
            const value = obj[key];
            if (cache.has(value)) {
                isFind = true;
                return;
            } else {
                cache.add(value)
            }
            find(value);
        }
    }
    find(obj);
    return isFind;
}